/*
 * ParserCanciones.cpp
 *
 *  Created on: 12/05/2013
 *      Author: pato
 */

#include "ParserCanciones.h"

int ParserCanciones::Parsear(string *letra, IndiceInvertido *indice, unsigned int idcancion) {
	char *palabra = NULL;
	NormalizadorTxt* normalizador = new NormalizadorTxt();
	string palabraStr;
	int cantidadTerminos;
	char *fraseProcesar = strdup (letra->c_str());
	palabra = strtok (fraseProcesar," .,;:ï¿½?_-<>\"/ï¿½!\t\n\r");
	cantidadTerminos=0;

	while (palabra != NULL) {
		palabraStr = string (palabra);
		normalizador->normalizarPalabra(&palabraStr);
		if (!this->esStopWord(palabraStr)) {
			indice->agregar(palabraStr,idcancion);
		}
		cantidadTerminos++;
		palabra = strtok (NULL," .,;:?\"_-</>\t\n\r");
	}
	free(fraseProcesar);
	delete normalizador;
	return cantidadTerminos;
}

int ParserCanciones::eliminarTextoDeIndiceInvertido(string *letra, IndiceInvertido *indice, unsigned int idcancion) {
	char *palabra = NULL;
	NormalizadorTxt* normalizador = new NormalizadorTxt();
	string palabraStr;
	int cantidadTerminos;
	char *fraseProcesar = strdup (letra->c_str());
	palabra = strtok (fraseProcesar," .,;:ï¿½?_-<>\"/ï¿½!\t\n\r");
	cantidadTerminos=0;

	while (palabra != NULL) {
		palabraStr = string (palabra);
		normalizador->normalizarPalabra(&palabraStr);
		if (!this->esStopWord(palabraStr)) {
			indice->eliminar(palabraStr,idcancion);
		}
		cantidadTerminos++;
		palabra = strtok (NULL," .,;:?\"_-</>\t\n\r");
	}
	free(fraseProcesar);
	delete normalizador;
	return cantidadTerminos;
}

bool ParserCanciones::esStopWord(string palabra) {
	list<string*>::const_iterator it;
	for (it = this->listaStopWords->begin(); it != this->listaStopWords->end(); ++it) {
		string* stopword = *it;
		if (*stopword == palabra) {
			return true;
		}
	}
	return false;
}

ParserCanciones::ParserCanciones(string path) {
	this->listaStopWords = new list<string*>();
	size_t pos_espacio = 0;
	string* p_palabra;
	string palabra, linea;
	ifstream archivo(path.c_str());
	if((!archivo.is_open()) || (!archivo.good())) {
		cout<<"NO SE LEYERON LAS STOPWORDS";
	}
	while(getline(archivo, linea)) {
		while(linea.size() != 0) {
			if((pos_espacio = linea.find_first_of(" ")) != std::string::npos) {
				palabra = linea.substr(0, pos_espacio);
				linea.erase(0, pos_espacio + 1);
			}
			else {
				palabra = linea;
				linea.clear();
			}
			p_palabra = new string(palabra);
			this->listaStopWords->push_back(p_palabra);
		}
	}
}

ParserCanciones::~ParserCanciones() {
	delete this->listaStopWords;
}









